package ln.javatest.day08.demo06;
/*
如何才能知道一个父类引用的对象，本来是什么子类？
向下转型一定要进行instanceof判断，否则可能会发生异常，类转换异常
格式：
对象 instanceof 类名称
判断对象能不能向下转成自己的类名称。
这将会得到一个boolean值结果，也就是判断前面的对象能不能当做后面类型的实例。
*/

public class Demo02Instanceof {
    public static void main(String[] args) {
        Animal animal = new Cat(); //本来是一只猫
        animal.eat(); //猫吃鱼
        //如果希望调用子类特有方法，需要向下转型
        if(animal instanceof Dog){
            Dog dog = (Dog) animal;
            dog.watchHouse();
        }
        if(animal instanceof Cat){
            Cat cat = (Cat) animal;
            cat.catchMouse();  //猫捉老鼠。
        }
        giveMeAnimal(new Dog());
    }
    public static void giveMeAnimal(Animal animal){
        if(animal instanceof Dog){
            Dog dog = (Dog) animal;
            dog.watchHouse();   //狗看家
        }
        if(animal instanceof Cat){
            Cat cat = (Cat) animal;
            cat.catchMouse();
        }
    }
}
